Some companies or agencies create specifications for middleware applications that are loaded onto smart cards. Many different smart card vendors can create smart cards which have the middleware applications on them. For example, for common access cards (CAC), there are about seven different smart card vendors.
A separate client application needs to be written for each accessing device to communicate with the middleware application on the smart card. The accessing device needs to have a different smart card driver for each smart card type (or middleware) it needs to support. When a smart card becomes accessible to a card reader in communication with an accessing device, the accessing device determines which of the card drivers it stores should be used to communicate with that smart card. This may be done by asking the smart card for its Answer To Reset (ATR) and then asking each card driver if it recognizes the ATR. If no drivers recognize and support the ATR, then the accessing device is unable to communicate with the smart card.
The ATR is an array of bytes that contains protocol information. Part of the ATR contains “historical bytes” that are vendor specific. A vendor that creates its own middleware for its card may encode the same historical bytes in all of its smart cards that will need to be supported by its client software. This way, if the vendor creates a new smart card (for example, with more memory), the new card will be supported by the old client software.
A problem occurs when different card vendors create cards which support common middleware and need to be understood by different client software on the accessing device. In this case, each card has different historical bytes so the client software needs to “hard code” support for each card (via the ATR). When a new card vendor is introduced, it may require a software update for the accessing device client software to add support for the new card by encoding the new card's ATR into the client software. Creating new client software is time-consuming and costly to deploy.